/**
 * 迭代器和for-of循环
 * author:dengyiping
 * date:2016/07/29
 */

var myArray = [1 , 3, 10, 6, 11];

console.log(myArray.toString());

longlongAgo();
in_es5();
forIn();
ES6();

function longlongAgo() {
    console.log("******类C++******");
    for (var index = 0; index < myArray.length; index++ ){
        console.log(myArray[index]);
         if(myArray[index] == 6){
             break ; //1 3 10 6
            //  return ; //1 3 10 6 
        }
    }
}

function in_es5(){
    //代码更简洁,break无法跳出循环，同理return也是
    console.log("****** ES5 ******");
    myArray.forEach(function (value) {
        console.log(value);
        if(value == 6){
        //    break ;  //SyntaxError: Illegal break statement
            return ;    //1 3 10 6 11
        }
    });
}

function ES6() {
    console.log("****** ES6 ******")
    for (var value of myArray){
        console.log(value);
        if(value == 6){
            break ; //1 3 10 6 
            // return ; //1 3 10 6 
        }
    }
}

function forIn(){
    console.log("******for-in******");
    for (var key in myArray) {
        console.log(myArray[key]);
        if(key == 6){
            break ; //1 3 10 6 
            // return ; //1 3 10 6 
        }
    }
}

/* 
   for-of优势：避开了for-in循环的所有缺陷，同forEach不同的是，它可以正确响应break/continue和return
   从设计用途来说：
   for-in循环是为遍历普通对象设计的,用来遍历对象属性，不适用于数组
   for-of循环用来遍历数据(支持数组、类数组对象:NodeList、Arguments等、ES6中的新集合类:Map、Set)
 */
